数据治理 | 进阶版Git:使用Git分支特性进行多人协作
目录
一、快速了解“分支”
二、Git 分支的使用
(一)准备工作
(二)创建分支
(三)基于分支开展工作
(四)项目进度管理
三、总结
本文共3950个字,阅读大约需要10分钟,欢迎指正!
数据治理 | 版本控制神器:GIT—介绍和安装 数据治理 | 版本控制神器:GIT—个人文档管理 数据治理 | 一文看懂GIT的基本原理! 数据治理 | 科研团队协同工作新神器!Git远程仓库的使用 数据治理 | 团队必备!使用Git进行多人协同工作
上期推文,我们模拟了一个团队协同完成某大学生创新课题项目的场景(传送门:数据治理 | 团队必备!使用Git进行多人协同工作),然后讲解了如何使用 Git 远程仓库进行多人协同工作。我们回顾一下基本的操作步骤:
项目管理员创建远程仓库,将团队成员加入到项目仓库中。 团队成员克隆(git clone)远程仓库到本地,开始工作并把成果文档放入仓库( git add / commit ) 团队成员使用 git push 提交最新数据到远程仓库(如果发现无法提交,需要用 git pull 拉取最新数据到本地) 项目管理员查看提交记录并做出相关指导
本文将介绍 Git 的分支特性,它可以帮助我们更好地进行版本控制和规划项目进度。
Part1快速了解“分支”
我们要是拥有“分身”能力就好了,这些分身继承自主体,又相互独立互不干扰。分身A去学数学,分身B去学语文,分身C去学英语 ……,等到某一天这些分身合并到主体,主体就同时拥有了所有分身的能力。Git的分支特性,就类似于“分身”。
在使用Git进行项目管理时,Git默认会创建一个 master 分支,也就是项目的“主体”。上期推文(传送门:数据治理 | 团队必备!使用Git进行多人协同工作)的场景中,只有3个人进行协同,但也发生了小李要提交最新数据到远程仓库却出现报错的问题,原因是小李工作期间,小赵也补充了最新的内容到远程仓库中,Git为了保持数据一致性,要求本地数据和远程仓库数据同步,如果团队人数进一步增加,这个问题将出现得更加频繁。
造成这个问题的主要原因是大家都在项目的“主体”(master 分支)上开工,为了保持项目数据不丢失,不混乱,Git 要求 push 前,先把远程仓库中最新的数据 pull 到本地电脑。可见,大家都在 一个 master 分支上工作会造成一定程度的不便。
Git 支持分支特性,一个分支代表一条独立的工作路线。使用分支意味着你可以从主线上分离开来,然后在不影响主线的同时继续工作。但是,大家工作在不同的分支上,数据相互独立不可见,如何查阅别人的数据呢?这就需要项目管理员对项目进度进行管理,并定期合并分支,让其他分支上的数据合并到 master 分支,然后各分支又可以从master获取最新数据了。
Part2Git 分支的使用
我们延续上期推文(传送门:数据治理 | 团队必备!使用Git进行多人协同工作)的模拟场景:王教授辅导小赵和小李完成某大学生创新课题项目。
(一)准备工作
当我使用分支特性时,需要配合权限管理功能,因此准备工作会比之前仅创建一个远程仓库多几个步骤:
王教授作为管理员,需要创建一个 “组织单位”(见图1) 王教授把小赵和小李添加到组织中(见图2) 王教授在“组织单位”中创建一个远程代码仓库,并设置成员(见图3和图4)
(二)创建分支
王教授作为管理员负责任务分配,并创建分支让团队成员工作于独立的分支上,下方代码模拟这一流程:
# 将远程仓库克隆到本地
git clone git@github.com:WangTeamTest/teamproject.git
# 进入“仓库”
cd teamproject
# 创建一个说明文档, 并输入内容
touch readme.txt
echo "小赵工作于分支zhao" >> readme.txt
echo "小李工作于分支lee" >> readme.txt
# 提交当前修改,自动创建 master分支( github 中是 main )
# 注:从 2020 年 10 月 1 日开始,GitHub 上的所有新库都将用中性词「main」命名,
# 取代原来的「master」,因为「master」是一个容易让人联想到奴隶制的术语。
git add .
git commit -m "创建了readme.txt"
git push
# 查看本地分支
git branch
# 输出:* main
# * 表示当前工作的分支
# 查看远程仓库分支
git branch -r
# 输出:origin/main
# origin是远程仓库地址的别名,main表示该仓库的主分支
# 基于main分支创建其他分支
# 1) 切换到 main 分支,如果正处于 main 分支,这个步骤可以省略
git switch main
# 2) 创建分支 zhao
git branch zhao
# 3) 查看本地分支
git branch
# 输出如下内容:
# * main
# zhao
# 4)创建分支 lee
git branch lee
# 切换分支,并将新分支提交到远程仓库
git switch zhao
git push --set-upstream origin zhao
git switch lee
git push --set-upstream origin lee
# 查看远程仓库的分支
git branch -r
# 输出如下内容:
# origin/lee
# origin/main
# origin/zhao
对上述代码的补充说明:
未提交过内容的仓库不具有任何分支,第一次提交后默认创建 master 分支 创建分支时,需要基于一个特定的分支,可以从 master 分支创建,也可以从非 master 分支创建 在 master 分支中, 创建了 zhao 分支, 那么 zhao 分支会继承 master 分支中的所有状态
登录 GitHub 远程仓库,可以看到如下图所示的3个分支。
(三)基于分支开展工作
小赵使用分支zhao,下面代码模拟他的工作:
# 将远程仓库克隆到本地
git clone git@github.com:WangTeamTest/teamproject.git
# 进入仓库
cd teamproject
# 切换到分支zhao
git switch zhao
# 模拟小赵的工作
mkdir 文献收集
mkdir 会议记录
mkdir 数据收集
touch 文献收集/文献1.pdf
touch 文献收集/文献2.pdf
touch 会议记录/2023-01-28.txt
touch 会议记录/2023-01-29.txt
touch 数据收集/2020统计数据.csv
touch 数据收集/2021统计数据.csv
# 提交工作
git add .
git commit -m "添加了数据和会议记录等资料"
git push
代码执行后,效果如下:
小李使用分支lee,下面代码模拟他的工作:
# 将远程仓库克隆到本地
git clone git@github.com:WangTeamTest/teamproject.git
# 进入仓库
cd teamproject
# 切换到分支lee
git switch lee
# 小李需要小赵提供的数据
# 下方命令表示把分支zhao的内容,合并到当前的分支lee
git merge origin/zhao
# 小李的工作
mkdir 计量模型
mkdir 论文写作
touch 计量模型/数据处理.py
touch 计量模型/数据统计.do
touch 计量模型/回归模型.do
touch 计量模型/模型检验.do
touch 论文写作/课题论文.docx
# 完成后提交
git add .
git commit -m "添加计量模型和论文初稿"
git push
代码执行后,效果如下:
我们前面提到过分支之间相互独立,下面和上期推文一样,模拟一个场景看看是否会有无法 push 的问题。场景如下:
小李工作期间,小赵增加工作内容并push到远程仓库,小李工作完成并push。
下面代码模拟小赵工作:
# 小赵补充材料
cd teamproject
git switch zhao
touch 数据收集/2019统计数据.csv
touch 数据收集/2022统计数据.csv
# 提交到远程仓库
git add .
git commit -m "材料补充"
git push
效果如下:
下面代码模拟小李工作:
cd teamproject
git switch lee
touch 论文写作/课题论文2.docx
# 提交到远程仓库
git add .
git commit -m "论文补充"
git push
效果如下:
用代码模拟小赵和小李的工作流程,发现上期推文中出现的报错没有出现,使用分支可以有效避免冲突问题。
(四)项目进度管理
王教授可以定期将分支zhao和分支lee的内容合到main分支,检查工作质量,合理安排工作进度。
cd teamproject
# 拉取最新代码
git pull
# 切换到主分支
git switch main
# 将其他分支的内容合并到主分支
git merge origin/zhao
git merge origin/lee
# 提交到远程仓库
git add .
git commit -m "合并内容到main分支"
git push
效果如下:
Part3总结
使用Git的分支特性可有效减少冲突,帮助我们更好地进行版本控制。
我们最后总结一下本期推文中用到的相关Git命令:
命令 | 说明 |
---|---|
git branch | 查看本地分支和当前分支(带 * 号) |
git branch -r | 查看远程仓库分支 |
git branch 分支名称 | 基于当前分支,创建新分支 |
git switch 分支名称 | 切换分支 |
git merge 分支名称 | 将指定分支内容合并到当前分支 |
希望大家好好练习和使用 Git ,我们下期再见 !
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 《社科领域大数据治理实务手册》
欢迎扫描👇二维码添加关注